#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//标准输入流
void my_cin()
{/*
 char mybuf[1024];
 int myint;
 long mylong;
 cin >> myint;
 cin >> mylong;
 cin >> mybuf;//遇到空格就结束，空格后面的字符不会进数组
 cout << "myint=" << myint << " mylong=" << mylong << " mybuf=" << mybuf << endl;

 char c;
 while ((c = cin.get()) != EOF)//可以输入多个字符串，会放到缓冲区，(回车键结束输入，开始取字符)每循环一次从缓冲区取一个字符，取完后会阻塞，ctrl+z退出
 {
 cout << "c=" << c <<endl;
 }

 char a, b, c;
 cin.get(a).get(b).get(c);//输入字符串到缓冲区，然后获取前三个字符分别复制给a b c若 缓冲区不足三个字符，会阻塞(每get一次获取缓冲区的下一个字符)
 cout << a << endl;
 cout << b << endl;
 cout << c << endl;
 */
	/*char buf1[256];
    cin >> buf1;//遇到空格结束
    cout << buf1 << endl;*/

	//char buf2[256];
	//cin.getline(buf2, 256);//可以输入空格
	//cout << buf2 << endl;


	//char buf4[256];
	//cin.ignore(4);//忽略前4个字符
	//cin.getline(buf4,256);
	//cout << "buf4=" << buf4 << endl;//前4个字符不会进入到buf中

	//char buf5[256];
	//cin >> buf5;
	//cin.ignore(3);//忽略前三个字符
	//char c =cin.peek(); //其返回值是一个char型的字符，其返回值是指针指向的当前字符，但它只是观测，指针仍停留在当前位置，并不后移(与get有所不同)
	//cout << "c=" << c << endl;
	//cout << "buf5=" << buf5 << endl;
	char c, d;
	cin.get(c);//获取缓冲区的第一个字符复制给c
	cin.putback('r');//上一次已经从缓冲区中get了一个字符，下一次get本该获取第二个字符,但是这里用了pubback函数，会把一个新的字符插入进来，下次get会获取新插入的字符
	cin.get(d);
	cout << "c=" << c << " d=" << d << endl;

}
//标准输出流
void my_cout()
{
	//cout << "hello world" << endl;
	//cout.put('h').put('e').put('l');//将字符输出到标准输出设备
	/*
	char *p = "hello itcast";
	cout.write(p,strlen(p))<<endl;
	cout.write(p,strlen(p)-4)<<endl;
	cout.write(p,strlen(p)+4)<<endl;*/

	//输出30个字符的宽度，不足用*填充
	//cout.width(30);
	//cout.fill('*');
	//cout.setf(ios::showbase);
	//cout << hex << 123 << endl;//16进制

	//使用控制符要引入 <iomanip>
	cout << "<Start>"
		 << setw(30)
		 << setfill('*')
		 << setiosflags(ios::showbase) //基数
		 << setiosflags(ios::internal)
		 << hex
		 << 123
		 << "<End>\n";

	system("pause");
	return;
}
//格式化输出
void format_cout()
{
	int a;
	cout << "input a:";
	cin >> a;
	cout << "dec:" << dec << a << endl; //以十进制形式输出整数
	cout << "hex:" << hex << a << endl; //以十六进制形式输出整数a
	cout << "oct:" << setbase(8) << a << endl; //以八进制形式输出整数a
	char *pt = "China"; //pt指向字符串"China"
	cout << setw(10) << pt << endl; //指定域宽为,输出字符串
	cout << setfill('*') << setw(10) << pt << endl; //指定域宽,输出字符串,空白处以'*'填充
	double pi = 22.0 / 7.0; //计算pi值
	//按指数形式输出,8位小数
	cout << setiosflags(ios::scientific) << setprecision(8);
	cout << "pi=" << pi << endl; //输出pi值
	cout << "pi=" << setprecision(4) << pi << endl; //改为位小数
	cout << "pi=" << setiosflags(ios::fixed) << pi << endl; //改为小数形式输出
	system("pause");
	return;
}

int main4()
{
	//my_cin();
	//my_cout();
	format_cout();
	return 0;
}